Opcode |
Instruction |
Description |
|
NP 0F 37 (EAX = 0) |
GETSEC[CAPABILITIES] |
Report the SMX capabilities. The capabilities index is input in EBX with the result returned in EAX. |
The GETSEC[CAPABILITIES] function returns a bit vector of supported GETSEC leaf functions. The CAPABILITIES leaf of GETSEC is selected with EAX set to 0 at entry. EBX is used as the selector for returning the bit vector field in EAX. GETSEC[CAPABILITIES] may be executed at all privilege levels, but the CR4.SMXE bit must be set or an unde- fined opcode exception (#UD) is returned.
With EBX = 0 upon execution of GETSEC[CAPABILITIES], EAX returns the a bit vector representing status on the
presence of a Intel® TXT-capable chipset and the first 30 available GETSEC leaf functions. The format of the returned bit vector is provided in Table 7-3.
If bit 0 is set to 1, then an Intel® TXT-capable chipset has been sampled present by the processor. If bits in the range of 1-30 are set, then the corresponding GETSEC leaf function is available. If the bit value at a given bit index is 0, then the GETSEC leaf function corresponding to that index is unsupported and attempted execution results in a #UD.
Bit 31 of EAX indicates if further leaf indexes are supported. If the Extended Leafs bit 31 is set, then additional leaf functions are accessed by repeating GETSEC[CAPABILITIES] with EBX incremented by one. When the most signifi- cant bit of EAX is not set, then additional GETSEC leaf functions are not supported; indexing EBX to a higher value results in EAX returning zero.
Field |
Bit position |
Description |
|
Chipset Present |
0 |
Intel® TXT-capable chipset is present. |
|
Undefined |
1 |
Reserved |
|
ENTERACCS |
2 |
GETSEC[ENTERACCS] is available. |
|
EXITAC |
3 |
GETSEC[EXITAC] is available. |
|
SENTER |
4 |
GETSEC[SENTER] is available. |
|
SEXIT |
5 |
GETSEC[SEXIT] is available. |
|
PARAMETERS |
6 |
GETSEC[PARAMETERS] is available. |
|
SMCTRL |
7 |
GETSEC[SMCTRL] is available. |
|
WAKEUP |
8 |
GETSEC[WAKEUP] is available. |
|
Undefined |
30:9 |
Reserved |
|
Extended Leafs |
31 |
Reserved for extended information reporting of GETSEC capabilities. |
IF (CR4.SMXE=0)
THEN #UD;
ELSIF (in VMX non-root operation)
THEN VM Exit (reason="GETSEC instruction");
IF (EBX=0) THEN
BitVector := 0;
IF (TXT chipset present)
BitVector[Chipset present] := 1;
IF (ENTERACCS Available)
THEN BitVector[ENTERACCS] := 1;
IF (EXITAC Available)
THEN BitVector[EXITAC] := 1;
IF (SENTER Available)
THEN BitVector[SENTER] := 1;
IF (SEXIT Available)
THEN BitVector[SEXIT] := 1;
IF (PARAMETERS Available)
THEN BitVector[PARAMETERS] := 1;
IF (SMCTRL Available)
THEN BitVector[SMCTRL] := 1;
IF (WAKEUP Available)
THEN BitVector[WAKEUP] := 1;
EAX := BitVector;
ELSE
EAX := 0;
END;;
None.
|
LOCK |
Causes #UD. |
|
REP* |
Cause #UD (includes REPNE/REPNZ and REP/REPE/REPZ). |
|
Operand size |
Causes #UD. |
|
NP |
66/F2/F3 prefixes are not allowed. |
|
Segment overrides |
Ignored. |
|
Address size |
Ignored. |
|
REX |
Ignored. |
|
#UD |
If CR4.SMXE = 0. |
|
#UD |
If CR4.SMXE = 0. |
|
#UD |
If CR4.SMXE = 0. |
|
#UD |
If CR4.SMXE = 0. |
|
#UD |
If CR4.SMXE = 0. |
|
Reason (GETSEC) |
If in VMX non-root operation. |